home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / mopterm / line.plt next >
Text File  |  1994-11-16  |  14KB  |  558 lines

  1. /*                                    *
  2. *     Line Control Auto Pilot        *
  3. *                                    *
  4. *     このオートパイロットについては,流用,変更,組み込み,         *
  5. *                         許可なくOKです。     *
  6. *    ただし,以下の著作権表示については,必ず,コピーして下さい。    *
  7. *                                    *
  8. *    All Right Reserved, Copyright (c)  モップ(NIFTY-PFF00570) 1992    *
  9. *                                 (Masahiro Kezuka)            *
  10. *                                                     *
  11. *                                  1992年 3月 22日 初版  Ver0.01              *
  12. *                                  1992年 4月  5日 二版  Ver0.02              *
  13. *                                  1992年 7月 17日 三版  Ver0.03              *
  14. *                                                     *
  15. *      作成/利用ファイル 「LINE.DAT」                           *
  16. *                                                     *
  17. *                                                           */
  18.  
  19. var AttrData[256];    /* MOPTERMの属性等 file「LINE.DAT」の頭5行*/
  20. var LineData[8192];    /* 登録したセンターの情報 LINE.DATの6行目以降
  21.     各行が    センター名/電話番号/モデムコマンド/属性データ     */
  22. var CurDir[64];        /* 起動時のディレクトリー            */
  23. var OneSize[4];        /* each Center data size        */
  24. var NumHost[4];        /* 登録されているセンターの数        */
  25. %OneSizeM 16+2+80+2+80+2; /* minimum OneHost Data Size        */
  26.  
  27. /***********************************************************************
  28. *
  29. *              共通の処理ルーチン
  30. *
  31. ***********************************************************************/
  32. /*  パラメタで指定されたファイルを削除する */
  33. /*%delfile{ [ filename ]   組み込み文でMopTerm本体が実現したため */
  34. /*    dispoff({Yes});           コメント化                     */
  35. /*    command({del }|filename);                                */
  36. /*    dispoff({No})                                            */
  37. /*};                                               */
  38.  
  39. /* パラメタで指定されたディレクトリへ移動する(「A:\」と「A:」の両方が可能) */
  40. %setcdir2 {[dir]
  41.     %dir2 @case(@nochar(dir),
  42.         2,{im(dir|{\})},,{im(dir)});
  43.     setcdir(dir2)
  44. };
  45.  
  46. %zerop{[num,deg]
  47.     var ans[deg];
  48.     var i[3];
  49.     i:=@nochar(num);
  50.     case(i!=deg,{Yes},
  51.     {
  52.         loop({
  53.             ans:=ans|{0};
  54.             i:=i+1;
  55.             im(i<deg)
  56.         });
  57.         im(ans | num);
  58.     },,{
  59.         im(num)
  60.     })
  61. };
  62.  
  63.  
  64. %blankp{[num,deg]
  65.     var ans[deg];
  66.     var i[3];
  67.     i:=@nochar(num);
  68.     case(i!=deg,{Yes},
  69.     {
  70.         loop({
  71.             ans:=ans|{ };
  72.             i:=i+1;
  73.             im(i<deg)
  74.         });
  75.         im( num | ans);
  76.     },,{
  77.         im(num)
  78.     })
  79. };
  80.  
  81. %makefile{
  82.     AttrData:={**MOPTERM HOST DATA Ver0.01**\n}|
  83.         {13111111208%$\n}|
  84.         {\n\n\n};
  85.     LineData:={};
  86.     write(LineFile,AttrData);
  87.     write(LineFile,LineData);
  88.     case(@filechk( LineFile ),{No},{
  89.         plane(
  90. {c管理用のファイル「LINE.DAT」が,カレントディレクトリーに作成できません。
  91. c 「MOPTERM.EXP」を CD又は, 
  92. c           プロテクトの掛かったフロッピーに置いて起動していませんか?。
  93. c  CDの場合, フロッピー等にコピーしてお使い下さい。
  94. s                                      /確認});
  95.         stop
  96.     });
  97.     OneSize:=OneSizeM;
  98. };
  99.  
  100. %RepFile{
  101.     delfile(LineFile);
  102.     write(LineFile,AttrData);
  103.     write(LineFile,LineData);
  104. };
  105.  
  106. %SetCName{
  107.     var pos[5];
  108.     var StartP[5];
  109.     var MenuText[1024];
  110.     var Line[80];
  111.     pos:=0;    
  112.     StartP:=1;
  113.     NumHost:=0;
  114.     crchg({No});
  115.     loop({
  116.         %Name @getchar(LineData,StartP,16);
  117.         case(Name<>{} && NumHost<=45,
  118.         {Yes},{ Line:=
  119.              @case(pos,
  120.                 0,{pos:=1;im({\ns    })},
  121.                 1,{pos:=2;im({})},
  122.                 2,{pos:=0;im({})} )
  123.                      | {/} | Name;
  124.             MenuText:=MenuText | Line;
  125.             NumHost:=NumHost+1;
  126.             StartP:=StartP+OneSize;
  127.             im({Yes})
  128.         },,{im({No})})
  129.     });
  130.     crchg({Yes});
  131.     /*display(NumHost|{=host\n});*/
  132.     im(MenuText)
  133. };
  134.  
  135. %DelCenter{
  136.     var line[5];
  137.     %DelCA{[num]
  138.         %Name @head(@getline(LineData,(num-1)*3+1,1),{\n});
  139.         select({ 「}|Name|{」の定義を削除しますか?},99999,{},
  140.         {   削除する   },{
  141.             LineData:=@getline(LineData,1,(num-1)*3) |
  142.                   @getline(LineData,num*3+1,9999);
  143.             RepFile;
  144.         },{  削除しない  },{})
  145.     };
  146.  
  147.     %MenuText {c      <<削除するセンタを選択して下さい>>\n}|
  148.           {s                       /< 処理中止 >};
  149.     %MenuRes @plane(MenuText|@SetCName);
  150.     case(@head(@getline(MenuRes,1,1),{\n})+0,
  151.     0,{
  152.         line:=2;
  153.         loop({
  154.             %no @head(@getline(MenuRes,line,1),{\n});
  155.             case(no!=0,{Yes},{DelCA((line-2)*3+no)});
  156.             line:=line+1;
  157.             im((no == 0) && (no <> {}))
  158.         })
  159.     });
  160. };
  161.  
  162. /* 登録変更用の,共通ルーチン,共通変数 */
  163. %SetT {[line,leng]
  164.     blankp(@head(@getline(res,line,1),{\n}),leng)
  165. };
  166. %SetD {[line]
  167.     im(@head(@getline(res,line,1),{\n})+0)
  168. };
  169. %SetDn {[line,leng]
  170.     zerop(@head(@getline(res,line,1),{\n})+0,leng)
  171. };
  172.  
  173. %CenMenuD{[title]
  174.     %CenterA2
  175. {r通信速度    : / 300 /1200 /2400 /4800 /9600
  176. rStopBit     : / 1 bit   / 2 Bit
  177. rParity      : / None    / Odd    / Even
  178. rDataleng    : / 8 bit   / 7 bit
  179. r先行送信行数: / 4  / 3  / 2  / 1
  180. r送信入力方式: /行単位   /文字単位1/文字単位2
  181. r受信改行方式: /復改同時 / 復改別
  182. tリトライ回数(0:無限) /123
  183. };
  184.     %Attr  @getline(AttrData,2,1);
  185.  
  186.     %BaudR @case(@getchar(OldL3,7,1)+0,0,
  187.         {getchar(Attr,2,1)},,
  188.         {getchar(OldL3,7,1)});
  189.  
  190.     %OldL3 @getline(NewLine,3,1);
  191.     %res @plane({c    <<センター付加属性}|Title|{画面>>\n} |
  192.         CenterA2 |
  193.         {s                                /}|Title|{しない/ }
  194.             |Title|{する},
  195.     BaudR,
  196.     @getchar(OldL3,8,1),    @getchar(OldL3,9,1),
  197.     @getchar(OldL3,10,1),    @getchar(OldL3,11,1),
  198.     @getchar(OldL3,12,1),    @getchar(OldL3,13,1),
  199.     @getchar(OldL3,14,3)+0 );
  200.     case(@SetD(9),
  201.     2,{
  202.         NewLine:= @getline(NewLine,1,2) | @getchar(OldL3,1,6)
  203.             | @SetD(1) | @SetD(2) | @SetD(3)
  204.             | @SetD(4) | @SetD(5) | @SetD(6) 
  205.             | @SetD(7) | @SetDn(8,3);
  206.     });
  207. };
  208.  
  209.  
  210. %CenMenu{[OLine,Title]
  211.  
  212.     %CenterAt
  213. {tセンター名(任意)    /1234567890123456
  214. t電話番号             /123456789012345678901234567890
  215. tモデムコマンド       /123456789012345678901234567890
  216. rコード系: /SJIS /JIS  /旧JIS/EUC
  217. r行の終わりのコード(送信時): /CR /LF /CR+LF
  218. rフロー 制御: /RS-CS線(ハード) /X-制御(ソフト) /無し
  219. rESC コード: /ESC無し   /ESCあり
  220. rCTRLコード: /CTRL無し  /CTRLあり
  221. rFlying X: /使用しない/使用する
  222. t接続後のオートパイロット(あれば) /12345678901234567890
  223. };
  224.     var NewLine[256];
  225.  
  226.     NewLine:=OLine;
  227.     loop({
  228.     %OldL  NewLine;
  229.     %OldL2 @getline(OldL,2,1);
  230.     %OldL3 @getline(OldL,3,1);
  231.  
  232.     %res @plane({c      <<センター} | Title | {画面>>\n} |
  233.         CenterAt |
  234.         {s                      /}|Title|{しない/ }
  235.             |Title|{する / 付加属性},
  236.     @head(@head(OldL,{\n}),{ }),
  237.     @head(@getchar(OldL2,1,30),{ }), @head(@getchar(OldL2,31,30),{ }),
  238.     @getchar(OldL3,1,1),    @getchar(OldL3,2,1),
  239.     @getchar(OldL3,3,1),    @getchar(OldL3,4,1),
  240.     @getchar(OldL3,5,1),    @getchar(OldL3,6,1),
  241.     @head(@getchar(OldL2,61,20),{ })  );
  242.     case(@SetD(11)>=2,
  243.     {Yes},{
  244.         NewLine:=@SetT(1,16) | {\n} 
  245.             | @SetT(2,30) | @SetT(3,30) | @SetT(10,20) | {\n}
  246.             | @SetD(4) | @SetD(5) | @SetD(6)
  247.             | @SetD(7) | @SetD(8) | @SetD(9)
  248.             | @getchar(OldL3,7) ;
  249.         case(@SetD(11),
  250.         2,{
  251.             NewLine:=@blankp(NewLine,OneSize-2) | {\n};
  252.             im({No})
  253.         },3,{    CenMenuD(Title);
  254.             im({Yes})
  255.         })
  256.     },,{
  257.         NewLine:={};
  258.         im({No})
  259.     })
  260.     });  /* end of loop */
  261.     im(NewLine)
  262. };
  263.  
  264. %MopMenu{[OLine,Title]
  265.  
  266.     %CenterAt
  267. {r回線種別  : /ダイヤル回線 /プッシュ回線
  268. r通信速度  : / 300 /1200 /2400 /4800 /9600
  269. rポート種別: /自動切替/内蔵      /外部ポート
  270. r文書送信時送信データ表示: /無し    /有り
  271. rクリック音: /無し    /有り
  272. r納豆スクロール : /無し    /有り
  273. rローマ時入力 : /無し    /有り
  274. rVisiBell  : /無し    /有り
  275. r改行マーク   : /無し    /有り
  276. tタブ桁数       /xx
  277. tDOSコマンド文字  /x
  278. tオートパイロット文字 /x
  279. };
  280.         var NewLine[256];
  281.  
  282.         NewLine:=OLine;
  283.     %OldL  NewLine;
  284.  
  285.     %res @plane({c      <<MopTerm属性} | Title | {画面>>\n} |
  286.         CenterAt |
  287.         {s                              /変更しない/ 変更する },
  288.     @getchar(OldL,1,1),    @getchar(OldL,2,1),
  289.     @getchar(OldL,3,1),    @getchar(OldL,4,1),
  290.     @getchar(OldL,5,1),    @getchar(OldL,6,1),
  291.     @getchar(OldL,7,1),    @getchar(OldL,8,1),
  292.     @getchar(OldL,9,1),    @getchar(OldL,10,2)+0,
  293.     @getchar(OldL,12,1),    @getchar(OldL,13,1),
  294.     );
  295.     case(@SetD(13)>=2,
  296.     {Yes},{
  297.         NewLine:= @SetD(1) | @SetD(2) | @SetD(3) | @SetD(4)
  298.             | @SetD(5) | @SetD(6) | @SetD(7) | @SetD(8)
  299.             | @SetD(9) | @SetDn(10,2) | @SetT(11,1) | @SetT(12,1)
  300.             | {\n};
  301.     },,{
  302.         NewLine:={};
  303.     });
  304.         im(NewLine)
  305. };
  306.  
  307. %AddCenter{
  308.     %NewL @CenMenu({},{登録});
  309.     case(NewL<>{},{Yes},{
  310.         LineData:=LineData | NewL;
  311.         write(LineFile,NewL);
  312.     });
  313. };
  314.  
  315. %RepC2{[num]
  316.     %OldL @getchar(@getline(LineData,(num-1)*3+1,3),1,OneSize-2);
  317.  
  318.     %NewL @CenMenu(OldL,{変更});
  319.     case(NewL<>{},{Yes},{
  320.         LineData:=@getline(LineData,1,(num-1)*3) |
  321.                   NewL |
  322.               @getline(LineData,num*3+1,9999);
  323.         RepFile;
  324.     })
  325. };
  326.  
  327. %RepMop{
  328.     %OldL @head(@getline(AttrData,2,1),{\n});
  329.  
  330.     %NewL @MopMenu(OldL,{変更});
  331.     case(NewL<>{},{Yes},{
  332.         AttrData:=@getline(AttrData,1,1) |
  333.                   NewL |
  334.               @getline(AttrData,3,9999);
  335.         RepFile;
  336.     })
  337. };
  338.  
  339. %RepCenter{
  340.     var line[5];
  341.  
  342.     %MenuText {c      <<変更するセンタを選択して下さい>>\n}|
  343.           {s                        /< 処理中止 >};
  344.     %MenuRes @plane(MenuText|@SetCName);
  345.     case(@head(@getline(MenuRes,1,1),{\n})+0,
  346.     0,{
  347.         line:=2;
  348.         loop({
  349.             %no @head(@getline(MenuRes,line,1),{\n});
  350.             case(no!=0,{Yes},{RepC2((line-2)*3+no)});
  351.             line:=line+1;
  352.             im((no == 0) && (no <> {}))
  353.         })
  354.     });
  355. };
  356.  
  357. %SetMop{
  358.     %Attr  @getline(AttrData,2,1);
  359.     %SetYN {[num,func]
  360.         %p @case(@getchar(Attr,num,1),
  361.             1,{   im(func | {({No})} ) },
  362.             2,{   im(func | {({Yes})}) },
  363.              ,{   im({})               } );
  364.         p
  365.     };
  366.  
  367.     case(@getchar(Attr,3,1),
  368.     1,{   port0({auto})
  369.     },2,{ port0({in})
  370.     },3,{ port0({out})
  371.     });
  372.     SetYN(4,{dispecho});
  373.     SetYN(5,{click});
  374.     SetYN(6,{nattou});
  375.  
  376.     case(@getchar(Attr,7,1),
  377.     1,{   setoak({J})
  378.     },2,{ setoak({JR})
  379.     });
  380.  
  381.     SetYN(8,{visibell});
  382.     SetYN(9,{retmark});
  383.  
  384.     case(@getchar(Attr,10,2)!=0,
  385.     {Yes},{   tab(@getchar(Attr,10,2))
  386.     });
  387.     case((@getchar(Attr,12,1)<>{}) && (@getchar(Attr,12,1)<>{ }),
  388.     {Yes},{   doschar(@getchar(Attr,12,1))
  389.     });
  390.     case((@getchar(Attr,13,1)<>{}) && (@getchar(Attr,13,1)<>{ }),
  391.     {Yes},{   pilotch(@getchar(Attr,13,1))
  392.     });
  393.  
  394. };
  395.  
  396. %AccCenter{[num]
  397.     %OldL @getline(LineData,(num-1)*3+1,3);
  398.     %OldL2 @getline(OldL,2,1);
  399.     %OldL3 @getline(OldL,3,1);
  400.     %Attr  @getline(AttrData,2,1);
  401.     var DialAT[100];
  402.     var count[4];
  403.  
  404.     %message {「}|@head(OldL,{\n}) |{」 へアクセスします。 (}|@daylong | {)};
  405.     display({\n}| message | {\n});
  406.     footnote(message);
  407.  
  408.     case(@getchar(OldL3,1,1),
  409.     1,{   code({sjis})
  410.     },2,{ code({jis})
  411.     },3,{ code({ojis})
  412.     },4,{ code({euc})
  413.     });
  414.     case(@getchar(OldL3,2,1),
  415.     1,{   lineend({CR}); lineendt({CR})
  416.     },2,{ lineend({LF}); lineendt({LF})
  417.     },3,{ lineend({CRLF}); lineendt({CRLF})
  418.     });
  419.     case(@getchar(OldL3,3,1),
  420.     1,{   rscs({Yes}); xon({No})
  421.     },2,{ rscs({No});  xon({Yes})
  422.     },3,{ rscs({No});  xon({No})
  423.     });
  424.     case(@getchar(OldL3,4,1),
  425.     1,{   esc({No})
  426.     },2,{ esc({Yes})
  427.     });
  428.     case(@getchar(OldL3,5,1),
  429.     1,{   ctrl({No})
  430.     },2,{ ctrl({Yes})
  431.     });
  432.     case(@getchar(OldL3,6,1),
  433.     1,{   flyingx({No})
  434.     },2,{ flyingx({Yes})
  435.     });
  436.     %BaudR @case(@getchar(OldL3,7,1)+0,0,
  437.         {getchar(Attr,2,1)},,
  438.         {getchar(OldL3,7,1)});
  439.     case(BaudR+0,
  440.     1,{ baud(300)
  441.     },2,{ baud(1200)
  442.     },3,{ baud(2400)
  443.     },4,{ baud(4800)
  444.     },5,{ baud(9600)
  445.     });
  446.     case(@getchar(OldL3,8,1),
  447.     1,{   stopbit(1)
  448.     },2,{ stopbit(2)
  449.     });
  450.     case(@getchar(OldL3,9,1),
  451.     1,{   parity({None})
  452.     },2,{ parity({Odd})
  453.     },3,{ parity({Even})
  454.     });
  455.     case(@getchar(OldL3,10,1),
  456.     1,{   dataleng(8)
  457.     },2,{ dataleng(7)
  458.     });
  459.     case(@getchar(OldL3,11,1)<>{ },
  460.     {Yes},{   flyline(@getchar(OldL3,11,1))
  461.     });
  462.     case(@getchar(OldL3,12,1),
  463.     1,{   sendtype({Line})
  464.     },2,{ sendtype({Ch/2})
  465.     },3,{ sendtype({Ch/1})
  466.     });
  467.     case(@getchar(OldL3,13,1),
  468.     1,{   crmode({No})
  469.     },2,{ crmode({Yes})
  470.     });
  471.  
  472.     DialAT:=@head(@getchar(OldL2,31,30),{ });
  473.     case(@getchar(DialAT,1,2),{AT},,{at},,
  474.         ,{DialAT:={AT}|DialAT});
  475.     case(@getchar(Attr,1,1),
  476.     1,{   DialAT:=DialAT | {DP}
  477.     },2,{ DialAT:=DialAT | {DT}
  478.     });
  479.     DialAT := DialAT | @head(@getchar(OldL2,1,30),{ });
  480.     count:=@getchar(OldL3,14,3);
  481.     case(count == 0 ,{Yes},{count:=9999});
  482.     loop({  count:=count-1;
  483.         dialone(DialAT,{
  484.             %Auto     @head(@getchar(OldL2,61,20),{ }) ;
  485.             case(Auto<>{},
  486.             {Yes},{
  487.                 case(@filechk( Auto ),{Yes},{ 
  488.                     %p {#}|Auto ;
  489.                     p
  490.                 },,{
  491.                     display({\nAutoPilot File「}|Auto|
  492.                         {」はありません\n})
  493.                 })
  494.             });
  495.             im({No})
  496.         },{im(count>0)} )
  497.     });
  498.     stop
  499. };
  500.  
  501. %FirstMenu{
  502.     var line[5];
  503.     var no[5];
  504.     %CSel @SetCName;
  505.     %MenuText {c     <<接続するセンタ-,又は,処理を選択して下さい>>\n} |
  506.      @case(NumHost,
  507.       0,{im({s  /<共通属性>/<センター登録>/----------/----------/<処理中止>})},
  508.      45,{im({s  /<共通属性>/----------/<センター削除>/<センター変更>/<処理中止>})},
  509.        ,{im({s  /<共通属性>/<センター登録>/<センター削除>/<センター変更>/<処理中止>})}
  510.       );
  511.     %MenuRes @plane(MenuText | CSel);
  512.     case(@head(@getline(MenuRes,1,1),{\n})+0,
  513.     1,{ RepMop; SetMop },
  514.     2,{case(NumHost<45,{Yes},AddCenter)},
  515.     3,{case(NumHost!=0,{Yes},DelCenter)},
  516.     4,{case(NumHost!=0,{Yes},RepCenter)},
  517.     5,{stop},
  518.     0,{
  519.         line:=2;
  520.         loop({
  521.             no:= @head(@getline(MenuRes,line,1),{\n});
  522.             case(no!=0,{Yes},{AccCenter((line-2)*3+no)});
  523.             line:=line+1;
  524.             im((no == 0 ) && (no <> {}))
  525.         });
  526.         case(no=={},{Yes},{stop})
  527.     });
  528. };
  529.  
  530.  
  531.  /* Main of LINE.PLT */
  532. %CurDir @case(@nochar(@getcdir),
  533.                 3,{getchar(@getcdir,1,2)},
  534.          ,{getcdir});
  535.  
  536. footnote({});
  537. stopbit(1);
  538. dataleng({8bit});
  539. parity({None});
  540. setoak({J});
  541. click({No});
  542. nattou({Yes});
  543.  
  544. %LineFile @case(@nochar(@initdir),
  545.         3,{head(@initdir,{\})},,{initdir}) | {\LINE.DAT};
  546. case(@filechk( LineFile ),
  547.   {Yes},{
  548.     AttrData:=@read(LineFile,1,5);
  549.     LineData:=@read(LineFile,6,999);
  550.     OneSize:=@nochar(@getline(LineFile,1,3));
  551.     case(OneSize<OneSizeM,{Yes},{OneSize:=OneSizeM});
  552.    },{No},{makefile});
  553.  
  554. SetMop;
  555.  
  556. loop({    FirstMenu; im({Yes})   })
  557.